// 筛选器
const ProductFilters = {
    /**
     * @param {array<Product>} products
     * @param {array<{type: String, low: number, high: number}>} ranges
     */
    rangesFilter: function(products, ranges) {
        if (ranges.length === 0) {
            return products;
        } else {
            /**
             * 循环多个区间条件，
             * 每种区间类型应该只有一个，
             * 比如价格区间不会有1000-2000和4000-6000同时需要的情况
             */
            for (let range of ranges) {
                if(Object.keys(range).length === 0) continue
                // 多个不同类型区间是与逻辑，可以直接赋值给自身
                products = products.filter(function(item) {
                    return item[range.type] >= range.low && item[range.type] <= range.high;
                });
            }

            return products;
        }
    },


    /**
     * @param {array<Product>} products
     * @param {array<{type: String, value: String}>} chooses
     */
    choosesFilter: function(products, chooses) {
        let tmpProducts = [];
        if (chooses.length === 0) {
            tmpProducts = products;
        } else {
            
            for (let choice of chooses) {
                if(Object.keys(choice).length === 0) continue
                products = products.filter(function(item) {
                    return item[choice.type].indexOf(choice.value) !== -1;
                });
            }
        }
        return products;
    },


}


// function doFilter(products, conditions) {
//     // 根据条件循环调用筛选器里的方法
//     for (key in conditions) {
//         // 判断是否有需要的过滤方法
//         if (ProductFilters.hasOwnProperty(key + 'Filter') && typeof ProductFilters[key + 'Filter'] === 'function') {
//             products = ProductFilters[key + 'Filter'](products, Conditions[key]);
//         }
//     }
//     return products;
// }

// function good(t, value) {
//     this.t = t
//     this.value = value
// }

// let phone = [
//     new good('apple', 6000),
//     new good('huawei', 3000),
//     new good('apple', 6000),
//     new good('huawei', 8000),
//     new good('apple', 8000),
//     new good('apple', 6000),
// ]

// console.log(phone)


// let Conditions = {
//     ranges: [{
//         type: 'value',
//         low: 7000,
//         high: 9000
//     }],
//     chooses: [{
//         type: 't',
//         value: 'apple'
//     }]
// }

// console.log(doFilter(phone, Conditions))